From 67e1acd4d7933139e37dddb4e4f102c0ea6d1168 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 24 Apr 2020 23:06:52 +0200 Subject: [PATCH] gtkpopover: Roll back properly if presenting the popup fails If the popover fails to be shown, it would internally undo visible and mapped state. If we just proceed as normal, the widget enters in inconsistent state, and a grab remains issued on the invisible widget, preventing further input from the input device. --- gtk/gtkpopover.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index a2a6adf654..89e5912e66 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -540,7 +540,7 @@ create_popup_layout (GtkPopover *popover) return layout; } -static void +static gboolean present_popup (GtkPopover *popover) { GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover); @@ -553,7 +553,12 @@ present_popup (GtkPopover *popover) MAX (req.width, 1), MAX (req.height, 1), layout)) - update_popover_layout (popover, layout); + { + update_popover_layout (popover, layout); + return TRUE; + } + + return FALSE; } static void @@ -913,7 +918,9 @@ gtk_popover_show (GtkWidget *widget) _gtk_widget_set_visible_flag (widget, TRUE); gtk_widget_realize (widget); - present_popup (popover); + if (!present_popup (popover)) + return; + gtk_widget_map (widget); if (priv->autohide) -- 2.30.2